library("lme4")
Loading required package: Matrix
library("ggplot2")
library("broom")
library("dplyr")

Attaching package: ‘dplyr’

The following objects are masked from ‘package:stats’:

    filter, lag

The following objects are masked from ‘package:base’:

    intersect, setdiff, setequal, union
data_df <- read.csv("vowel_master.csv", header= TRUE)


data_df$ictus <- as.factor(data_df$ictus)
data_df$stressed <- as.factor(data_df$stressed)
data_df$stressed <- recode_factor(data_df$stressed, "0" = "unstressed","1" = "stressed")
data_df$quantity <- as.factor(data_df$quantity)
data_df$song <- as.factor(data_df$song)
data_df$word <- as.factor(data_df$word)
#head(data_df)

#to look at vowel duration in song-level and word-level prominence positions, I filter out only syllables of Q1 and Q2, and only those shapes which surface in both stressed and unstressed positions 
strictus_data <- filter(data_df, data_df$quantity!="3" & data_df$shape != "VCC" & data_df$shape != "VVC" & data_df$shape != "VV")

#strictus_data <- filter(strictus_data, nchar(strictus_data$segment)==1)
head(strictus_data)
NA
NA
ggplot(strictus_data,aes(ictus,duration)) + 
  geom_jitter(color = "violet", alpha = 0.5) +
  facet_wrap("song") +
  labs(x = "beat position", y = "mean vowel duration (ms)") + 
  theme_minimal()
ggsave("song_icK_dur.png")
Saving 7.06 x 4.36 in image

  
ggplot(strictus_data,aes(stressed,duration)) + 
  geom_jitter(color = "orange", alpha = 0.5) +
  facet_wrap("song") + 
  labs(x = "word stress", y = "within-song mean vowel duration (ms)") + 
  theme_minimal()
ggsave("song_str_dur.png")
Saving 7.06 x 4.36 in image

ggplot(strictus_data,aes(ictus,duration)) + 
  geom_jitter(color = "violet", alpha = 0.5) +
  facet_wrap("performer") + 
  labs(x = "beat position", y = "mean vowel duration (ms)") + 
  theme_minimal()
ggsave("perf_ick_dur.png")
Saving 7.06 x 4.36 in image

ggplot(strictus_data,aes(stressed,duration)) + 
  geom_jitter(color = "orange", alpha = 0.5) +
  facet_wrap("performer") + 
  labs(x = "word stress", y = "within-subject mean vowel duration (ms)") + 
  theme_minimal()
ggsave("perf_str_dur.png")
Saving 7.06 x 4.36 in image

interaction.plot(strictus_data$quantity,strictus_data$ictus,strictus_data$duration,xlab="quantity",ylab="mean vowel duration(ms)",trace.label = "beat")

interaction.plot(strictus_data$stressed,strictus_data$ictus,strictus_data$duration,xlab="stressed",ylab="mean vowel duration(ms)",trace.label = "beat")

ggplot(strictus_data,aes(x=stressed ,y=duration,color = ictus)) + 
  geom_violin() + stat_ydensity() + theme_minimal() +
  labs( xlab = "word stress" ,ylab = "vowel duration (ms)") + 
  facet_wrap("quantity", labeller = label_both)
  
ggsave("dur_density_qfac.png")
Saving 7.06 x 4.36 in image

ggplot(strictus_data,aes(x=shape,y=duration, color = ictus)) +
geom_violin() + stat_ydensity() + theme_minimal() +
labs( xlab = "syllable shape" ,ylab = "vowel duration (ms)") 

ggsave("dur_shapeictus.png")
Saving 7.06 x 4.36 in image

ggplot(strictus_data,aes(x=shape,y=duration, color = stressed)) +
geom_violin() + stat_ydensity() + theme_minimal() +
labs( xlab = "syllable shape" ,ylab = "vowel duration (ms)") 

ggsave("dur_shapestress.png")
Saving 7.06 x 4.36 in image

lindesignmod <- lmer(duration ~ ictus + stressed + ictus*stressed + quantity+  (1|song) + (1|performer), data = strictus_data, REML = FALSE)
summary(lindesignmod)
Linear mixed model fit by maximum likelihood  ['lmerMod']
Formula: duration ~ ictus + stressed + ictus * stressed + quantity + (1 |      song) + (1 | performer)
   Data: strictus_data

     AIC      BIC   logLik deviance df.resid 
 -1779.7  -1744.7    897.9  -1795.7      581 

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-4.1657 -0.6134 -0.0816  0.5322  3.6544 

Random effects:
 Groups    Name        Variance  Std.Dev.
 song      (Intercept) 0.0016929 0.04115 
 performer (Intercept) 0.0001313 0.01146 
 Residual              0.0026248 0.05123 
Number of obs: 589, groups:  song, 9; performer, 3

Fixed effects:
                           Estimate Std. Error t value
(Intercept)                0.221105   0.018048  12.251
ictusoff                  -0.024893   0.010000  -2.489
stressedstressed           0.034834   0.010357   3.363
quantity2                 -0.050977   0.004445 -11.469
ictusoff:stressedstressed -0.019006   0.016468  -1.154

Correlation of Fixed Effects:
            (Intr) ictsff strssd qntty2
ictusoff    -0.491                     
strssdstrss -0.467  0.896              
quantity2   -0.073 -0.073 -0.180       
ictsff:strs  0.298 -0.642 -0.663  0.169
plot(lindesignmod)

linperfmod <- lmer(duration ~ ictus + stressed + ictus*stressed  + quantity + (1|performer), data = strictus_data,REML = FALSE)
summary(linperfmod)
Linear mixed model fit by maximum likelihood  ['lmerMod']
Formula: duration ~ ictus + stressed + ictus * stressed + quantity + (1 |      performer)
   Data: strictus_data

     AIC      BIC   logLik deviance df.resid 
 -1625.9  -1595.2    819.9  -1639.9      582 

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-2.8450 -0.6461 -0.1630  0.5188  3.4975 

Random effects:
 Groups    Name        Variance  Std.Dev.
 performer (Intercept) 0.0006242 0.02498 
 Residual              0.0035523 0.05960 
Number of obs: 589, groups:  performer, 3

Fixed effects:
                           Estimate Std. Error t value
(Intercept)                0.231796   0.018150  12.771
ictusoff                  -0.044255   0.011444  -3.867
stressedstressed           0.014604   0.011858   1.232
quantity2                 -0.050451   0.005155  -9.787
ictusoff:stressedstressed  0.024063   0.018602   1.294

Correlation of Fixed Effects:
            (Intr) ictsff strssd qntty2
ictusoff    -0.567                     
strssdstrss -0.539  0.893              
quantity2   -0.086 -0.068 -0.178       
ictsff:strs  0.340 -0.628 -0.651  0.166
linsongmod <- lmer(duration ~ ictus + stressed + ictus*stressed + quantity + (1|song), data = strictus_data,REML = FALSE)
summary(linsongmod)
Linear mixed model fit by maximum likelihood  ['lmerMod']
Formula: duration ~ ictus + stressed + ictus * stressed + quantity + (1 |      song)
   Data: strictus_data

     AIC      BIC   logLik deviance df.resid 
 -1781.7  -1751.1    897.9  -1795.7      582 

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-4.1662 -0.6128 -0.0810  0.5304  3.6566 

Random effects:
 Groups   Name        Variance Std.Dev.
 song     (Intercept) 0.001824 0.04271 
 Residual             0.002625 0.05123 
Number of obs: 589, groups:  song, 9

Fixed effects:
                           Estimate Std. Error t value
(Intercept)                0.221258   0.017143  12.907
ictusoff                  -0.024862   0.010000  -2.486
stressedstressed           0.034868   0.010357   3.367
quantity2                 -0.050989   0.004445 -11.471
ictusoff:stressedstressed -0.019076   0.016469  -1.158

Correlation of Fixed Effects:
            (Intr) ictsff strssd qntty2
ictusoff    -0.517                     
strssdstrss -0.492  0.896              
quantity2   -0.077 -0.073 -0.180       
ictsff:strs  0.313 -0.642 -0.663  0.169
linnullIntmod <- lmer(duration ~ (1|song) + (1|performer), data = strictus_data, REML = FALSE)
n1 <- summary(linnullIntmod)
print(n1)
Linear mixed model fit by maximum likelihood  ['lmerMod']
Formula: duration ~ (1 | song) + (1 | performer)
   Data: strictus_data

     AIC      BIC   logLik deviance df.resid 
 -1670.9  -1653.0    839.4  -1678.9      641 

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-3.3952 -0.6996 -0.1327  0.6270  3.5442 

Random effects:
 Groups    Name        Variance  Std.Dev.
 song      (Intercept) 0.0018316 0.04280 
 performer (Intercept) 0.0001561 0.01249 
 Residual              0.0041343 0.06430 
Number of obs: 645, groups:  song, 9; performer, 3

Fixed effects:
            Estimate Std. Error t value
(Intercept)  0.20045    0.01633   12.27
compp <- anova(lindesignmod,linsongmod)
print(compp)
Data: strictus_data
Models:
linsongmod: duration ~ ictus + stressed + ictus * stressed + quantity + (1 | song)
lindesignmod: duration ~ ictus + stressed + ictus * stressed + quantity + (1 | song) + (1 | performer)
             npar     AIC     BIC logLik deviance  Chisq Df Pr(>Chisq)
linsongmod      7 -1876.7 -1845.4 945.35  -1890.7                     
lindesignmod    8 -1874.7 -1839.0 945.36  -1890.7 0.0199  1     0.8879
comps <- anova(lindesignmod,linperfmod)
print(comps)
Data: strictus_data
Models:
linperfmod: duration ~ ictus + stressed + ictus * stressed + quantity + (1 | performer)
lindesignmod: duration ~ ictus + stressed + ictus * stressed + quantity + (1 | song) + (1 | performer)
             npar     AIC     BIC logLik deviance  Chisq Df Pr(>Chisq)    
linperfmod      7 -1711.9 -1680.6 862.95  -1725.9                         
lindesignmod    8 -1874.7 -1839.0 945.36  -1890.7 164.84  1  < 2.2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
comp2 <- anova(lindesignmod,linnullIntmod)
print(comp2)
Data: strictus_data
Models:
linnullIntmod: duration ~ (1 | song) + (1 | performer)
lindesignmod: duration ~ ictus + stressed + ictus * stressed + quantity + (1 | song) + (1 | performer)
              npar     AIC   BIC logLik deviance  Chisq Df Pr(>Chisq)    
linnullIntmod    4 -1670.8 -1653 839.43  -1678.8                         
lindesignmod     8 -1874.7 -1839 945.36  -1890.7 211.88  4  < 2.2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
comp3 <- anova(linsongmod,linnullIntmod)
print(comp3)
Data: strictus_data
Models:
linnullIntmod: duration ~ (1 | song) + (1 | performer)
linsongmod: duration ~ ictus + stressed + ictus * stressed + quantity + (1 | song)
              npar     AIC     BIC logLik deviance  Chisq Df Pr(>Chisq)    
linnullIntmod    4 -1585.8 -1568.3 796.92  -1593.8                         
linsongmod       7 -1781.7 -1751.0 897.85  -1795.7 201.87  3  < 2.2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

ggplot(strictus_data,aes(ictus,euclid)) + 
  geom_jitter(color = "violet", alpha = 0.5) +
  facet_wrap("song") +
  labs(x = "beat position", y = "vowel dispersion") + 
  theme_minimal()

ggplot(strictus_data,aes(stressed,euclid)) + 
  geom_jitter(color = "orange", alpha = 0.5) +
  facet_wrap("song") +
  labs(x = "word stress", y = "vowel dispersion") + 
  theme_minimal()

ggplot(strictus_data,aes(ictus,euclid)) + 
  geom_jitter(color = "violet", alpha = 0.5) +
  facet_wrap("performer") +
  labs(x = "beat position", y = "vowel dispersion") + 
  theme_minimal()

ggplot(strictus_data,aes(stressed,euclid)) + 
  geom_jitter(color = "orange", alpha = 0.5) +
  facet_wrap("performer") +
  labs(x = "word stress", y = "vowel dispersion") + 
  theme_minimal()

NA
NA
ggplot(strictus_data,aes(x=ictus ,y=euclid,color = ictus)) + 
  geom_violin() + stat_ydensity() + theme_minimal() +
  labs( xlab = "beat" ,ylab = "euclidean distance") 

  #facet_wrap("quantity", labeller = label_both)
interaction.plot(strictus_data$stressed,strictus_data$ictus,strictus_data$euclid,xlab="word stress",ylab="vowel dispersion",trace.label = "beat")

interaction.plot(strictus_data$quantity,strictus_data$ictus,strictus_data$euclid,xlab="syllable quantity",ylab="vowel dispersion",trace.label = "beat")

ggplot(strictus_data,aes(x=stressed ,y=euclid)) + 
  geom_violin() + stat_ydensity() + theme_minimal() +
  labs( xlab = "word stress" ,ylab = "euclidean distance") 

ggplot(strictus_data,aes(x=quantity ,y=euclid)) + 
  geom_violin() + stat_ydensity() + theme_minimal() +
  labs( xlab = "syllable quantity" ,ylab = "euclidean distance") 

LS0tCnRpdGxlOiAiUTEgYW5kIFEyIGR1cmF0aW9uIGluIHN0cmVzcyBhbmQgaWN0dXMiCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KCmBgYHtyfQpsaWJyYXJ5KCJsbWU0IikKbGlicmFyeSgiZ2dwbG90MiIpCmxpYnJhcnkoImJyb29tIikKbGlicmFyeSgiZHBseXIiKQpkYXRhX2RmIDwtIHJlYWQuY3N2KCJ2b3dlbF9tYXN0ZXIuY3N2IiwgaGVhZGVyPSBUUlVFKQoKCmRhdGFfZGYkaWN0dXMgPC0gYXMuZmFjdG9yKGRhdGFfZGYkaWN0dXMpCmRhdGFfZGYkc3RyZXNzZWQgPC0gYXMuZmFjdG9yKGRhdGFfZGYkc3RyZXNzZWQpCmRhdGFfZGYkc3RyZXNzZWQgPC0gcmVjb2RlX2ZhY3RvcihkYXRhX2RmJHN0cmVzc2VkLCAiMCIgPSAidW5zdHJlc3NlZCIsIjEiID0gInN0cmVzc2VkIikKZGF0YV9kZiRxdWFudGl0eSA8LSBhcy5mYWN0b3IoZGF0YV9kZiRxdWFudGl0eSkKZGF0YV9kZiRzb25nIDwtIGFzLmZhY3RvcihkYXRhX2RmJHNvbmcpCmRhdGFfZGYkd29yZCA8LSBhcy5mYWN0b3IoZGF0YV9kZiR3b3JkKQojaGVhZChkYXRhX2RmKQoKI3RvIGxvb2sgYXQgdm93ZWwgZHVyYXRpb24gaW4gc29uZy1sZXZlbCBhbmQgd29yZC1sZXZlbCBwcm9taW5lbmNlIHBvc2l0aW9ucywgSSBmaWx0ZXIgb3V0IG9ubHkgc3lsbGFibGVzIG9mIFExIGFuZCBRMiwgYW5kIG9ubHkgdGhvc2Ugc2hhcGVzIHdoaWNoIHN1cmZhY2UgaW4gYm90aCBzdHJlc3NlZCBhbmQgdW5zdHJlc3NlZCBwb3NpdGlvbnMgCnN0cmljdHVzX2RhdGEgPC0gZmlsdGVyKGRhdGFfZGYsIGRhdGFfZGYkcXVhbnRpdHkhPSIzIiAmIGRhdGFfZGYkc2hhcGUgIT0gIlZDQyIgJiBkYXRhX2RmJHNoYXBlICE9ICJWVkMiICYgZGF0YV9kZiRzaGFwZSAhPSAiVlYiKQoKI3N0cmljdHVzX2RhdGEgPC0gZmlsdGVyKHN0cmljdHVzX2RhdGEsIG5jaGFyKHN0cmljdHVzX2RhdGEkc2VnbWVudCk9PTEpCmhlYWQoc3RyaWN0dXNfZGF0YSkKCgpgYGAKCmBgYHtyfQpnZ3Bsb3Qoc3RyaWN0dXNfZGF0YSxhZXMoaWN0dXMsZHVyYXRpb24pKSArIAogIGdlb21faml0dGVyKGNvbG9yID0gInZpb2xldCIsIGFscGhhID0gMC41KSArCiAgZmFjZXRfd3JhcCgic29uZyIpICsKICBsYWJzKHggPSAiYmVhdCBwb3NpdGlvbiIsIHkgPSAibWVhbiB2b3dlbCBkdXJhdGlvbiAobXMpIikgKyAKICB0aGVtZV9taW5pbWFsKCkKZ2dzYXZlKCJzb25nX2ljS19kdXIucG5nIikKICAKZ2dwbG90KHN0cmljdHVzX2RhdGEsYWVzKHN0cmVzc2VkLGR1cmF0aW9uKSkgKyAKICBnZW9tX2ppdHRlcihjb2xvciA9ICJvcmFuZ2UiLCBhbHBoYSA9IDAuNSkgKwogIGZhY2V0X3dyYXAoInNvbmciKSArIAogIGxhYnMoeCA9ICJ3b3JkIHN0cmVzcyIsIHkgPSAid2l0aGluLXNvbmcgbWVhbiB2b3dlbCBkdXJhdGlvbiAobXMpIikgKyAKICB0aGVtZV9taW5pbWFsKCkKZ2dzYXZlKCJzb25nX3N0cl9kdXIucG5nIikKCmdncGxvdChzdHJpY3R1c19kYXRhLGFlcyhpY3R1cyxkdXJhdGlvbikpICsgCiAgZ2VvbV9qaXR0ZXIoY29sb3IgPSAidmlvbGV0IiwgYWxwaGEgPSAwLjUpICsKICBmYWNldF93cmFwKCJwZXJmb3JtZXIiKSArIAogIGxhYnMoeCA9ICJiZWF0IHBvc2l0aW9uIiwgeSA9ICJtZWFuIHZvd2VsIGR1cmF0aW9uIChtcykiKSArIAogIHRoZW1lX21pbmltYWwoKQpnZ3NhdmUoInBlcmZfaWNrX2R1ci5wbmciKQpnZ3Bsb3Qoc3RyaWN0dXNfZGF0YSxhZXMoc3RyZXNzZWQsZHVyYXRpb24pKSArIAogIGdlb21faml0dGVyKGNvbG9yID0gIm9yYW5nZSIsIGFscGhhID0gMC41KSArCiAgZmFjZXRfd3JhcCgicGVyZm9ybWVyIikgKyAKICBsYWJzKHggPSAid29yZCBzdHJlc3MiLCB5ID0gIndpdGhpbi1zdWJqZWN0IG1lYW4gdm93ZWwgZHVyYXRpb24gKG1zKSIpICsgCiAgdGhlbWVfbWluaW1hbCgpCmdnc2F2ZSgicGVyZl9zdHJfZHVyLnBuZyIpCmBgYAoKYGBge3J9CmludGVyYWN0aW9uLnBsb3Qoc3RyaWN0dXNfZGF0YSRxdWFudGl0eSxzdHJpY3R1c19kYXRhJGljdHVzLHN0cmljdHVzX2RhdGEkZHVyYXRpb24seGxhYj0icXVhbnRpdHkiLHlsYWI9Im1lYW4gdm93ZWwgZHVyYXRpb24obXMpIix0cmFjZS5sYWJlbCA9ICJiZWF0IikKYGBgCgpgYGB7cn0KaW50ZXJhY3Rpb24ucGxvdChzdHJpY3R1c19kYXRhJHN0cmVzc2VkLHN0cmljdHVzX2RhdGEkaWN0dXMsc3RyaWN0dXNfZGF0YSRkdXJhdGlvbix4bGFiPSJzdHJlc3NlZCIseWxhYj0ibWVhbiB2b3dlbCBkdXJhdGlvbihtcykiLHRyYWNlLmxhYmVsID0gImJlYXQiKQpgYGAKCmBgYHtyfQpnZ3Bsb3Qoc3RyaWN0dXNfZGF0YSxhZXMoeD1zdHJlc3NlZCAseT1kdXJhdGlvbixjb2xvciA9IGljdHVzKSkgKyAKICBnZW9tX3Zpb2xpbigpICsgc3RhdF95ZGVuc2l0eSgpICsgdGhlbWVfbWluaW1hbCgpICsKICBsYWJzKCB4bGFiID0gIndvcmQgc3RyZXNzIiAseWxhYiA9ICJ2b3dlbCBkdXJhdGlvbiAobXMpIikgKyAKICBmYWNldF93cmFwKCJxdWFudGl0eSIsIGxhYmVsbGVyID0gbGFiZWxfYm90aCkKICAKZ2dzYXZlKCJkdXJfZGVuc2l0eV9xZmFjLnBuZyIpCgoKYGBgCgpgYGB7cn0KZ2dwbG90KHN0cmljdHVzX2RhdGEsYWVzKHg9c2hhcGUseT1kdXJhdGlvbiwgY29sb3IgPSBpY3R1cykpICsKZ2VvbV92aW9saW4oKSArIHN0YXRfeWRlbnNpdHkoKSArIHRoZW1lX21pbmltYWwoKSArCmxhYnMoIHhsYWIgPSAic3lsbGFibGUgc2hhcGUiICx5bGFiID0gInZvd2VsIGR1cmF0aW9uIChtcykiKSAKCmdnc2F2ZSgiZHVyX3NoYXBlaWN0dXMucG5nIikKYGBgCgpgYGB7cn0KZ2dwbG90KHN0cmljdHVzX2RhdGEsYWVzKHg9c2hhcGUseT1kdXJhdGlvbiwgY29sb3IgPSBzdHJlc3NlZCkpICsKZ2VvbV92aW9saW4oKSArIHN0YXRfeWRlbnNpdHkoKSArIHRoZW1lX21pbmltYWwoKSArCmxhYnMoIHhsYWIgPSAic3lsbGFibGUgc2hhcGUiICx5bGFiID0gInZvd2VsIGR1cmF0aW9uIChtcykiKSAKCmdnc2F2ZSgiZHVyX3NoYXBlc3RyZXNzLnBuZyIpCmBgYAoKYGBge3J9CmxpbmRlc2lnbm1vZCA8LSBsbWVyKGR1cmF0aW9uIH4gaWN0dXMgKyBzdHJlc3NlZCArIGljdHVzKnN0cmVzc2VkICsgcXVhbnRpdHkrICAoMXxzb25nKSArICgxfHBlcmZvcm1lciksIGRhdGEgPSBzdHJpY3R1c19kYXRhLCBSRU1MID0gRkFMU0UpCnN1bW1hcnkobGluZGVzaWdubW9kKQpgYGAKCmBgYHtyfQpwbG90KGxpbmRlc2lnbm1vZCkKYGBgCgpgYGB7cn0KbGlucGVyZm1vZCA8LSBsbWVyKGR1cmF0aW9uIH4gaWN0dXMgKyBzdHJlc3NlZCArIGljdHVzKnN0cmVzc2VkICArIHF1YW50aXR5ICsgKDF8cGVyZm9ybWVyKSwgZGF0YSA9IHN0cmljdHVzX2RhdGEsUkVNTCA9IEZBTFNFKQpzdW1tYXJ5KGxpbnBlcmZtb2QpCmBgYAoKYGBge3J9CmxpbnNvbmdtb2QgPC0gbG1lcihkdXJhdGlvbiB+IGljdHVzICsgc3RyZXNzZWQgKyBpY3R1cypzdHJlc3NlZCArIHF1YW50aXR5ICsgKDF8c29uZyksIGRhdGEgPSBzdHJpY3R1c19kYXRhLFJFTUwgPSBGQUxTRSkKc3VtbWFyeShsaW5zb25nbW9kKQpgYGAKCmBgYHtyfQpsaW5udWxsSW50bW9kIDwtIGxtZXIoZHVyYXRpb24gfiAoMXxzb25nKSArICgxfHBlcmZvcm1lciksIGRhdGEgPSBzdHJpY3R1c19kYXRhLCBSRU1MID0gRkFMU0UpCm4xIDwtIHN1bW1hcnkobGlubnVsbEludG1vZCkKcHJpbnQobjEpCmBgYAoKYGBge3J9CmNvbXBwIDwtIGFub3ZhKGxpbmRlc2lnbm1vZCxsaW5zb25nbW9kKQpwcmludChjb21wcCkKYGBgCgpgYGB7cn0KY29tcHMgPC0gYW5vdmEobGluZGVzaWdubW9kLGxpbnBlcmZtb2QpCnByaW50KGNvbXBzKQpgYGAKCmBgYHtyfQpjb21wMiA8LSBhbm92YShsaW5kZXNpZ25tb2QsbGlubnVsbEludG1vZCkKcHJpbnQoY29tcDIpCmBgYAoKYGBge3J9CmNvbXAzIDwtIGFub3ZhKGxpbnNvbmdtb2QsbGlubnVsbEludG1vZCkKcHJpbnQoY29tcDMpCmBgYAoKYGBge3J9CgpnZ3Bsb3Qoc3RyaWN0dXNfZGF0YSxhZXMoaWN0dXMsZXVjbGlkKSkgKyAKICBnZW9tX2ppdHRlcihjb2xvciA9ICJ2aW9sZXQiLCBhbHBoYSA9IDAuNSkgKwogIGZhY2V0X3dyYXAoInNvbmciKSArCiAgbGFicyh4ID0gImJlYXQgcG9zaXRpb24iLCB5ID0gInZvd2VsIGRpc3BlcnNpb24iKSArIAogIHRoZW1lX21pbmltYWwoKQpnZ3Bsb3Qoc3RyaWN0dXNfZGF0YSxhZXMoc3RyZXNzZWQsZXVjbGlkKSkgKyAKICBnZW9tX2ppdHRlcihjb2xvciA9ICJvcmFuZ2UiLCBhbHBoYSA9IDAuNSkgKwogIGZhY2V0X3dyYXAoInNvbmciKSArCiAgbGFicyh4ID0gIndvcmQgc3RyZXNzIiwgeSA9ICJ2b3dlbCBkaXNwZXJzaW9uIikgKyAKICB0aGVtZV9taW5pbWFsKCkKZ2dwbG90KHN0cmljdHVzX2RhdGEsYWVzKGljdHVzLGV1Y2xpZCkpICsgCiAgZ2VvbV9qaXR0ZXIoY29sb3IgPSAidmlvbGV0IiwgYWxwaGEgPSAwLjUpICsKICBmYWNldF93cmFwKCJwZXJmb3JtZXIiKSArCiAgbGFicyh4ID0gImJlYXQgcG9zaXRpb24iLCB5ID0gInZvd2VsIGRpc3BlcnNpb24iKSArIAogIHRoZW1lX21pbmltYWwoKQpnZ3Bsb3Qoc3RyaWN0dXNfZGF0YSxhZXMoc3RyZXNzZWQsZXVjbGlkKSkgKyAKICBnZW9tX2ppdHRlcihjb2xvciA9ICJvcmFuZ2UiLCBhbHBoYSA9IDAuNSkgKwogIGZhY2V0X3dyYXAoInBlcmZvcm1lciIpICsKICBsYWJzKHggPSAid29yZCBzdHJlc3MiLCB5ID0gInZvd2VsIGRpc3BlcnNpb24iKSArIAogIHRoZW1lX21pbmltYWwoKQogIAoKYGBgCgpgYGB7cn0KZ2dwbG90KHN0cmljdHVzX2RhdGEsYWVzKHg9aWN0dXMgLHk9ZXVjbGlkLGNvbG9yID0gaWN0dXMpKSArIAogIGdlb21fdmlvbGluKCkgKyBzdGF0X3lkZW5zaXR5KCkgKyB0aGVtZV9taW5pbWFsKCkgKwogIGxhYnMoIHhsYWIgPSAiYmVhdCIgLHlsYWIgPSAiZXVjbGlkZWFuIGRpc3RhbmNlIikgCiAgI2ZhY2V0X3dyYXAoInF1YW50aXR5IiwgbGFiZWxsZXIgPSBsYWJlbF9ib3RoKQpgYGAKCmBgYHtyfQppbnRlcmFjdGlvbi5wbG90KHN0cmljdHVzX2RhdGEkc3RyZXNzZWQsc3RyaWN0dXNfZGF0YSRpY3R1cyxzdHJpY3R1c19kYXRhJGV1Y2xpZCx4bGFiPSJ3b3JkIHN0cmVzcyIseWxhYj0idm93ZWwgZGlzcGVyc2lvbiIsdHJhY2UubGFiZWwgPSAiYmVhdCIpCmBgYAoKYGBge3J9CmludGVyYWN0aW9uLnBsb3Qoc3RyaWN0dXNfZGF0YSRxdWFudGl0eSxzdHJpY3R1c19kYXRhJGljdHVzLHN0cmljdHVzX2RhdGEkZXVjbGlkLHhsYWI9InN5bGxhYmxlIHF1YW50aXR5Iix5bGFiPSJ2b3dlbCBkaXNwZXJzaW9uIix0cmFjZS5sYWJlbCA9ICJiZWF0IikKYGBgCgpgYGB7cn0KZ2dwbG90KHN0cmljdHVzX2RhdGEsYWVzKHg9c3RyZXNzZWQgLHk9ZXVjbGlkKSkgKyAKICBnZW9tX3Zpb2xpbigpICsgc3RhdF95ZGVuc2l0eSgpICsgdGhlbWVfbWluaW1hbCgpICsKICBsYWJzKCB4bGFiID0gIndvcmQgc3RyZXNzIiAseWxhYiA9ICJldWNsaWRlYW4gZGlzdGFuY2UiKSAKYGBgCgpgYGB7cn0KZ2dwbG90KHN0cmljdHVzX2RhdGEsYWVzKHg9cXVhbnRpdHkgLHk9ZXVjbGlkKSkgKyAKICBnZW9tX3Zpb2xpbigpICsgc3RhdF95ZGVuc2l0eSgpICsgdGhlbWVfbWluaW1hbCgpICsKICBsYWJzKCB4bGFiID0gInN5bGxhYmxlIHF1YW50aXR5IiAseWxhYiA9ICJldWNsaWRlYW4gZGlzdGFuY2UiKSAKYGBgCg==